#include <stdlib.h>
#include <stdio.h>

typedef int ElemType;
typedef struct DNode {
    ElemType data;
    struct DNode *prior, *next;
} DNode, *DLinklist;

typedef struct Node {
    ElemType data;
    struct Node *next;
} Node, *LinkList;

//初始化一个循环单链表
bool InitList(LinkList &L) {
    L = (LinkList) malloc(sizeof(Node));
    if (L == NULL) {
        return false; //内存不足，分配失败
    }
    L->next = L;//头结点next指向头结点
    return true;
}


//初始化空的循环双链表
bool InitDLinkList(DLinklist &L) {
    L = (DLinklist) malloc(sizeof(DNode));
    if (L == NULL) {//内存不足，分配失败
        return false;
    }
    L->next = L;//头结点的prior指向头结点
    L->prior = L;//头结点的next指向头结点
    return true;
}

//判断循环双链表是否为空
bool Empty(DLinklist L) {
    if (L->next == L) {
        return true;
    } else return false;
}

//判断结点p是否为循环双链表的表尾结点
bool isTail(DLinklist L, DNode *p) {
    if (p->next == L) {
        return true;
    } else {
        return false;
    }
}

//在p结点之后插入s结点
bool InsertNextDNode(DNode *p, DNode *s) {
    s->next = p->next;//将结点*s插入到结点*p之后
    p->next->prior = s;
    p->next = s;
    s->prior = p;
}
//删除p的后继结点q
bool DeleteNextDNode(DNode *p, DNode *q) {
    p->next = q->next;
    q->next->prior = p;
    free(q);
}

void textDLinkList() {
    //初始化循环双链表
    DLinklist L;
    InitDLinkList(L);
    //
}

int main() {


    return 0;
}
